package controlador;

import java.awt.event.ActionListener;
import java.awt.event.FocusListener;
import java.awt.event.FocusEvent;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import vista.VentanaEstudiante;
import vista.VentanaPrincipal;
import vista.Mensaje;
import modelo.Seccion;
import modelo.Estudiante;


public class EscuchadorVentanaEstudiante extends WindowAdapter implements ActionListener,KeyListener,FocusListener,ItemListener
{
    private VentanaEstudiante referencia;
    private Seccion seccion;
   
    private void cerrarVentana()
    {
       new VentanaPrincipal(seccion);
       this.referencia.setVisible(false);
       this.referencia.dispose();  
    }

    private boolean asignarEstudiante(Estudiante estudiante)
    {
        boolean asignado= false;
        if (estudiante!=null)
        {
            if (estudiante.getCedula().substring(0, 1).equalsIgnoreCase("V"))
                this.referencia.getRbVenezolano().setSelected(true);
            else
                this.referencia.getRbExtranjero().setSelected(true);

            this.referencia.getTxtCedula().setText(estudiante.getCedula().substring(2, estudiante.getCedula().length()));
            this.referencia.getTxtNombre().setText(estudiante.getNombre());
            this.referencia.getTxtApellido().setText(estudiante.getApellido());
            this.referencia.getTxtNotaFinal().setText(Float.toString(estudiante.getNotaFinal()));
            asignado= true;
        }

        return asignado;

    }

    private void inicializarVentana()
    {
       
            if (seccion.isEvaluacionesAplicadas())
                this.referencia.getBtnNuevoGuardar().setEnabled(false);
            else
                this.referencia.getBtnNuevoGuardar().setEnabled(true);
            
            
            this.referencia.getBtnEliminar().setEnabled(false);
            this.referencia.getBtnModificar().setEnabled(false);


            this.referencia.getTxtCedula().setText("");
            this.referencia.getTxtNombre().setText("");
            this.referencia.getTxtApellido().setText("");
            this.referencia.getTxtNotaFinal().setText("");
            this.referencia.getRbVenezolano().setSelected(true);
        
    }

    public EscuchadorVentanaEstudiante(VentanaEstudiante ventana,Seccion seccion)
    {
        this.referencia= ventana;
        this.seccion= seccion;
    }

    public void windowClosing(WindowEvent evt)
    {
        cerrarVentana();
    }

    public void windowOpened(WindowEvent evt)
    {
        inicializarVentana();
    }

    public void actionPerformed(ActionEvent e)
    {
        Estudiante estudiante;
        if (e.getSource()==this.referencia.getBtnNuevoGuardar())
        {
            
              String cedula;
              if (this.referencia.getRbVenezolano().isSelected())
                    cedula= "V-";
              else
                    cedula= "E-";
                
              cedula += this.referencia.getTxtCedula().getText();
                
              estudiante= new Estudiante(cedula,this.referencia.getTxtNombre().getText(),this.referencia.getTxtApellido().getText());

              if (estudiante.validar())
              {
                    
                  if (Mensaje.mostrarConfirmacion("¿Desea Inscribir a este Estudiante?"))
                  {
                      if (seccion.inscribirEstudiante(estudiante))
                          Mensaje.mostrarInformacion("El Estudiante se ha Inscrito con Exito");
                      else
                          Mensaje.mostrarError("El Estudiante no puede Inscribirse ¡Ya existe un Estudiante con la misma Cedula!");
                  }

                  
               }
               else
                   Mensaje.mostrarError("!Los Datos del Estudiante no son Validos¡");

              inicializarVentana();
              
        }
        else if(e.getSource()==this.referencia.getBtnModificar())
        {
             String cedula;
             if (this.referencia.getRbVenezolano().isSelected())
                    cedula= "V-";
             else
                    cedula= "E-";

             cedula += this.referencia.getTxtCedula().getText();

             estudiante= seccion.buscarEstudiante(cedula);


             if (estudiante!=null)
             {
                try
                {
                  Estudiante estudianteCopia= (Estudiante) estudiante.clone();
                  estudianteCopia.setNombre(this.referencia.getTxtNombre().getText());
                  estudianteCopia.setApellido(this.referencia.getTxtApellido().getText());
                  if (estudianteCopia.validar())
                  {

                    if (Mensaje.mostrarConfirmacion("¿Desea Modificar a este Estudiante?"))
                    {
                        estudiante.setNombre(estudianteCopia.getNombre());
                        estudiante.setApellido(estudianteCopia.getApellido());
                        Mensaje.mostrarInformacion("El Estudiante se ha Modificado con Exito");
                    }
                  }
                  else
                    Mensaje.mostrarError("!Los Datos del Estudiante no son Validos¡");
                }
                catch(CloneNotSupportedException excepcion)
                {
                    Mensaje.mostrarError("!Error Actualizando los Datos del Estudiante¡");
                }
             }

             inicializarVentana();
        }
        else if(e.getSource()==this.referencia.getBtnEliminar())
        {
            String cedula;
            if (this.referencia.getRbVenezolano().isSelected())
                    cedula= "V-";
            else
                    cedula= "E-";

            cedula += this.referencia.getTxtCedula().getText();

            estudiante= seccion.buscarEstudiante(cedula);


            if (estudiante!=null)
            {

                 if (Mensaje.mostrarConfirmacion("¿Desea Eliminar a este Estudiante?"))
                 {
                     if (seccion.retirarEstudiante(estudiante))
                        Mensaje.mostrarInformacion("El Estudiante se ha Eliminado con Exito");
                     else
                        Mensaje.mostrarError("!Error Eliminando Estudiante!");
                 }

             }

             inicializarVentana();
        }
        else if(e.getSource()==this.referencia.getBtnSalir())
        {
            cerrarVentana();
        }
    }

    /*Se llama cuando de presiona un caracter unicode*/
    public void keyTyped(KeyEvent e)
    {
        if (e.getSource()==this.referencia.getTxtCedula())
        {
            if (!Character.isDigit(e.getKeyChar()))
               e.setKeyChar(Character.MIN_VALUE);
            else
            {
               

               if (seccion.isEvaluacionesAplicadas())
                 this.referencia.getBtnNuevoGuardar().setEnabled(false);
               else
                 this.referencia.getBtnNuevoGuardar().setEnabled(true);

               this.referencia.getBtnEliminar().setEnabled(false);
               this.referencia.getBtnModificar().setEnabled(false);

               this.referencia.getTxtNombre().setText("");
               this.referencia.getTxtApellido().setText("");
               this.referencia.getTxtNotaFinal().setText("");
            }
        }
        else if(e.getSource()==this.referencia.getTxtNombre())
        {
            if (!Character.isLetter(e.getKeyChar()) && !Character.isSpaceChar(e.getKeyChar()))
               e.setKeyChar(Character.MIN_VALUE);


        }
        else if(e.getSource()==this.referencia.getTxtApellido())
        {
                if (!Character.isLetter(e.getKeyChar()) && !Character.isSpaceChar(e.getKeyChar()))
                    e.setKeyChar(Character.MIN_VALUE);
        }

    }

    //Cuando se presiona una tecla
    public void keyPressed(KeyEvent e) 
    {
        if (e.getSource()==this.referencia.getTxtCedula())
        {
            if (e.getKeyCode()==KeyEvent.VK_BACK_SPACE)
            {    
               if (seccion.isEvaluacionesAplicadas())
                 this.referencia.getBtnNuevoGuardar().setEnabled(false);
               else
                 this.referencia.getBtnNuevoGuardar().setEnabled(true);

               this.referencia.getBtnEliminar().setEnabled(false);
               this.referencia.getBtnModificar().setEnabled(false);

               this.referencia.getTxtNombre().setText("");
               this.referencia.getTxtApellido().setText("");
               this.referencia.getTxtNotaFinal().setText("");
            }   
            
        }
    }

    //Cuando se suelta una tecla
    public void keyReleased(KeyEvent e){}

    public void focusGained(FocusEvent e){}

    public void focusLost(FocusEvent e)
    {
          if (e.getSource()==this.referencia.getTxtCedula() ||
             e.getSource()==this.referencia.getRbVenezolano() ||
             e.getSource()==this.referencia.getRbExtranjero())
          {
            if (!this.referencia.getTxtCedula().getText().isEmpty())
            {
                String cedula;
                if (this.referencia.getRbVenezolano().isSelected())
                    cedula= "V-";
                else
                    cedula= "E-";

                cedula += this.referencia.getTxtCedula().getText();

                if (cedula.matches("[V|v|e|E]-[1-9][0-9]{6,7}"))
                {
                    Estudiante estudiante= seccion.buscarEstudiante(cedula);
                    if (estudiante!=null)
                    {
                        asignarEstudiante(estudiante);

                       this.referencia.getBtnNuevoGuardar().setEnabled(false);


                        this.referencia.getBtnEliminar().setEnabled(true);
                        this.referencia.getBtnModificar().setEnabled(true);

                        

                    }
                    else
                    {

                       if (seccion.isEvaluacionesAplicadas())
                          this.referencia.getBtnNuevoGuardar().setEnabled(false);
                       else
                          this.referencia.getBtnNuevoGuardar().setEnabled(true);

                   
                       this.referencia.getBtnEliminar().setEnabled(false);
                       this.referencia.getBtnModificar().setEnabled(false);

                       this.referencia.getTxtNombre().requestFocus();
                       this.referencia.getTxtNombre().setText("");
                       this.referencia.getTxtApellido().setText("");
                       this.referencia.getTxtNotaFinal().setText("");
                    }
                }
           }
        }
    }

    public void itemStateChanged(ItemEvent e)
    {
        if (e.getSource()==this.referencia.getRbVenezolano() || e.getSource()==this.referencia.getRbExtranjero())
        {
            if (seccion.isEvaluacionesAplicadas())
                 this.referencia.getBtnNuevoGuardar().setEnabled(false);
            else
                this.referencia.getBtnNuevoGuardar().setEnabled(true);

            this.referencia.getBtnEliminar().setEnabled(false);
            this.referencia.getBtnModificar().setEnabled(false);

            this.referencia.getTxtNombre().setText("");
            this.referencia.getTxtApellido().setText("");
            this.referencia.getTxtNotaFinal().setText("");
        }
    }



}
